package IO.fileCopy;

import java.io.*;

/*
 * 文件复制：先读，再写，io作为中间层
 * 步骤：
 * 1、先创建输入流对象，将文件读到内存中
 * 2、创建输出流对象，将内存中的数据写入到文件中
 * 3、关闭流
 *
 * 在这种情况下，如果一味抛异常，我们的流关闭代码可能会执行不到，所以，我们使用try-catch-finally
 * */
public class PictureCopy {
    public static void main(String[] args) throws Exception {
        //最后文件格式保持一致，否则会出错
        copy("C:\\Users\\20918\\Pictures\\aaa.png", "D:\\aaa\\bbb\\aaa.png");
    }

    //复制文件
    public static void copy(String srcPath, String destPath) throws IOException {
        /*InputStream is = null;
        OutputStream os = null;
        try {
            //1、创建输入流对象和输出流对象
            is = new FileInputStream(srcPath);
            os = new FileOutputStream(destPath);
            //2、开始读取文件并写入到目标文件中
            byte[] bytes = new byte[1024];
            int len;//覆盖长度
            while ((len = is.read(bytes)) != -1) {
                os.write(bytes, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //3、关闭流
            if (os != null) {
                os.close();
            }
            if (is != null) {
                is.close();
            }
        }*/
        //try with resources
        //会自动关闭资源，把资源放在try()里面
        //资源是最终实现Closeable接口的文件
        try (InputStream is = new FileInputStream(srcPath); OutputStream os = new FileOutputStream(destPath)) {
            //1、创建输入流对象和输出流对象
            //2、开始读取文件并写入到目标文件中
            byte[] bytes = new byte[1024];
            int len;//覆盖长度
            while ((len = is.read(bytes)) != -1) {
                os.write(bytes, 0, len);
            }
            System.out.println("复制成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
